// rule.js

/**
 * 规则配置：
 * @property {number} maxExecutions - 最大执行次数 (1, Infinity, 或一个正整数)
 * @property {number} [intervalMs] - 可选。执行间隔时间，单位：毫秒。仅当 maxExecutions > 1 或 Infinity 时有效。
 */
export const rules = [
    {
        name: "GitHub Star Button Beautifier (单次)",
        urlMatch: "*://github.com/*/*/tree/*",
        executorName: "executor_GitHubStar",
        maxExecutions: 1,
        runOnLoad: true
    },
    // 1. 无限次执行 demo：持续监控搜索结果的 DOM
    {
        name: "GitHub Search DOM Monitor (无限次)",
        urlMatch: "*://github.com/search?*", // 匹配搜索结果页
        executorName: "executor_GitHubInfiniteMonitor", // 新执行器
        maxExecutions: Infinity,
        intervalMs: 3000, // 每隔 3 秒执行一次
        runOnLoad: true
    },
    // 2. 多次执行 demo：模拟有限次的自动翻页或数据采集
    {
        name: "GitHub Search Data Collector (多次)",
        urlMatch: "*://github.com/search?*",
        executorName: "executor_GitHubLimitedCollector", // 新执行器
        maxExecutions: 4, // 总共执行 4 次
        intervalMs: 7000, // 每次执行间隔 7 秒
        runOnLoad: true
    },
];

// 辅助函数：简化URL通配符匹配
export function simpleUrlMatch(pattern, url) {
    if (typeof pattern !== 'string') {
        // 如果输入已经是 RegExp，直接测试
        return pattern.test(url);
    }

    // 1. 转义所有正则表达式特殊字符
    let regexString = pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");

    // 2. 特殊处理 Chrome 的协议通配符 (*://)
    // 必须精确匹配 http:// 或 https://
    regexString = regexString.replace(/\\\*:\\\/\\\//g, '(http|https):\\/\\/');

    // 3. 处理其他通用通配符 (*)
    // 将剩余的 * 替换为 .* (匹配任意字符0次或多次)
    regexString = regexString.replace(/\\\*/g, '.*');

    // 4. 创建最终的正则表达式，确保匹配字符串的开头和结尾
    const regex = new RegExp("^" + regexString + "$");

    // 测试匹配
    return regex.test(url);
}
